package Base.Polymorphism;

public class PersonTest {
    public static void main(String[] args) {
        Person person = new Person();
        person.eat();

        Man man = new Man();
        man.age = 22;
        man.eat();
        man.earnMoney();

        // 对象的多态性: 父类的引用指向子类的对象(子类的对象赋给父类的引用)
        Person person1 = new Man();
        Person person2 = new Woman();
        // 多态的使用：当调用子父类同名同参的方法时，实际执行的是子类重写父类的方法 ----- 虚拟方法调用
        person1.eat();
        person2.eat();
        // 重点： 父类（Person）中并没有，所以无法调用
        // 编译时，看左边;运行时，看右边
//        person1.earnMoney();

        // 说明 instanceof
        System.out.println("============================");

        Man m1  = (Man) person1;
        m1.earnMoney();
        m1.isSmoking = true;

        if (person1 instanceof Woman){
            System.out.println(" 继承于女");
        }else {
            System.out.println("继承于男");
        }

    }
}
